//Random Game Engine
//Copyright (C) 2013  Nikolay Dionisov

//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.

//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.

//You should have received a copy of the GNU General Public License
//along with this program.  If not, see <http://www.gnu.org/licenses/>.



#ifndef __WINDOWS_PLATFORM__H_INCLUDED__
#define __WINDOWS_PLATFORM__H_INCLUDED__
#include <Windows.h>
#include "PlatformManager.h"
#include <string>
#include "..\..\SystemInterface.h"
#include "..\ManagerContainer.h"
namespace re
{
	namespace core
	{
		class WindowsWindow : public IWindow
		{
		public:
			WindowsWindow() {}
			~WindowsWindow() {}
			friend class WindowsPlatform;
		protected:
			HWND hwnd_;
		};
		class IWindow;
		class WindowsPlatform : public IPlatformManager
		{
		public:
			WindowsPlatform();
			~WindowsPlatform();

			IWindow* VCreateWindow(std::wstring& title);
			void VDestroyWindow(IWindow* window);
			void VProcessMessages();
			void SetManagerContainer(ManagerContainer* managers) { man_container = managers; }

			ISystem* LoadModule(const std::wstring& source);

			bool registered;
			LRESULT WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

		private:
			ManagerContainer* man_container;
		};
	}
}

#endif